#!/usr/bin/env python
# -*- coding: utf8 -*-
# 
# Programado por Juan Marcelo Conca y Pablo Carrai

#
# Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo
# los términos de la Licencia Pública General GNU, tal y como está publicada
# por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su
# elección) cualquier versión posterior.
#
# Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA
# GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN
# FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.
#
# Usted debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa; si no es así, escriba a la Free Software Foundation,
# Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU.
#
# Programado en python utilizando geany como editor, y para la parte grafica
# wxglade


import wx
import MySQLdb
import wx.lib.dialogs


class Splash():
	# Esta funcion es la que muestra la imagen de comienzo
    
    def __init__(self):
        # Se carga en una variable la imagen del archivo.bmp 
        image = wx.Image('splash_1.bmp', wx.BITMAP_TYPE_BMP)
        bmp = image.ConvertToBitmap()
        wx.SplashScreen(bmp, wx.SPLASH_CENTRE_ON_SCREEN |
        wx.SPLASH_TIMEOUT, 4000, None, -1)
        wx.Yield()



class Principal(wx.Frame):
	# Basicamente es la clase principal, 
	
    def __init__(self, *args, **kwds):

        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        # En esta parte agregamos todo el manbrullo que significa la barra de herramientas
        # Primero tenemos un tamaño que se usara en las imagenes
        tsize = (25, 25)
        # Generamos variables que seran imagenes de una libreria estandar de wxpython
        busqueda_bmp =  wx.ArtProvider.GetBitmap(wx.ART_FIND, wx.ART_TOOLBAR, tsize)
        contactos_bmp =  wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, tsize)
        editar_bmp =  wx.ArtProvider.GetBitmap(wx.ART_CUT, wx.ART_TOOLBAR, tsize)
        ingreso_bmp =  wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, tsize)
        licencia_bmp = wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_TOOLBAR, tsize)
        autores_bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_TOOLBAR, tsize)
        salir_bmp =  wx.ArtProvider.GetBitmap(wx.ART_QUIT, wx.ART_TOOLBAR, tsize)
        eliminar_bmp =  wx.ArtProvider.GetBitmap(wx.ART_CROSS_MARK, wx.ART_TOOLBAR, tsize)
        # Creamos la barra de herramientas
        toolbar = self.CreateToolBar()
        # Y comenzamos a agregar las imagenes a la barra en si identificandolos con diferentes id
        toolbar.AddLabelTool(wx.ID_FIND, 'Buscar', busqueda_bmp, shortHelp = 'Buscar', longHelp = 'Busqueda de contactos')
        # Para cada elemento agregamos su accion 
        self.Bind(wx.EVT_TOOL, self.OnBuscar, id = wx.ID_FIND)
        toolbar.AddLabelTool(wx.ID_OPEN, 'Contactos', contactos_bmp, shortHelp = 'Contactos', longHelp = 'Lista de contactos')
        self.Bind(wx.EVT_TOOL, self.OnListar, id = wx.ID_OPEN)
        toolbar.AddLabelTool(wx.ID_CUT, 'Editar', editar_bmp, shortHelp = 'Editar', longHelp = 'editar lista de contactos')
        self.Bind(wx.EVT_TOOL, self.OnEditar, id = wx.ID_CUT)
        toolbar.AddLabelTool(wx.ID_PASTE, 'Ingresar', ingreso_bmp, shortHelp = 'Ingreso', longHelp = 'Ingresar contactos')        
        self.Bind(wx.EVT_TOOL, self.OnIngreso, id = wx.ID_PASTE)
        toolbar.AddLabelTool(wx.ID_DELETE, 'Ingresar', eliminar_bmp, shortHelp = 'Eliminar', longHelp = 'Elimina un  contactos')        
        self.Bind(wx.EVT_TOOL, self.OnEliminar, id = wx.ID_DELETE)
        # Agregamos un separador de elementos        
        toolbar.AddSeparator()
        toolbar.AddLabelTool(wx.ID_COPY, 'Licencia', licencia_bmp, shortHelp = 'Licencia', longHelp = 'Licencia')
        self.Bind(wx.EVT_TOOL, self.OnLicencia, id = wx.ID_COPY)
        toolbar.AddLabelTool(wx.ID_HELP, 'Autores', autores_bmp, shortHelp = 'Autores', longHelp = 'Autores')
        self.Bind(wx.EVT_TOOL, self.OnAutores, id = wx.ID_HELP)        
        toolbar.AddSeparator()
        toolbar.AddLabelTool(wx.ID_EXIT, 'Salir', salir_bmp, shortHelp = 'Salir', longHelp = 'Salir de la aplicación')
        self.Bind(wx.EVT_TOOL, self.OnSalir, id = wx.ID_EXIT)
        toolbar.AddSeparator()
        # Pedimos que se seteen los tamaños a las imagenes. Asi no se van de tamaño
        toolbar.SetToolBitmapSize(tsize)
		
		#############################################
		# Lo de abajo es un menu que funciona, pero
		# por el momento esta comentado por que ahora
		# la idea es dejar que funciones el programa
		# utilizando una barra de herramienta. 
		#############################################
        # habilitamos un menu con varias opciones
        #self.menubar = wx.MenuBar()
        # Creamos los menues que utilizaremos
        # habilitamos menu principal
        #menuquehacemos = wx.Menu()
        #menuacerca = wx.Menu()
        #self.busqueda = wx.MenuItem(menuquehacemos, wx.NewId(), "&Busqueda", "Permite buscar un contacto")
        #self.listar = wx.MenuItem(menuquehacemos, wx.NewId(), "&Contactos", "Nos muestra la lista de contactos")
        #self.editar = wx.MenuItem(menuquehacemos, wx.NewId(),"&Editar","Nos permite editar un contacto")
        #self.ingreso = wx.MenuItem(menuquehacemos, wx.NewId(), '&Ingreso', 'Ingresamos un nuevo contacto')
        #self.salir = wx.MenuItem(menuquehacemos, wx.NewId(), "&Salir","Nos permite abandonar el programa")
        #self.licencia = wx.MenuItem(menuacerca, wx.NewId(), "&Licencia","Te baraja la licencia")
        #self.autores = wx.MenuItem(menuacerca, wx.NewId(), "&Autores","La locura detras del codigo")
        # agregamos los elementos a los menues
        #menuquehacemos.AppendItem(self.busqueda)
        #menuquehacemos.AppendItem(self.listar)
        #menuquehacemos.AppendItem(self.editar)
        #menuquehacemos.AppendItem(self.ingreso)        
        #menuquehacemos.AppendItem(self.salir)
        #menuacerca.AppendItem(self.autores)
        #menuacerca.AppendItem(self.licencia)
        #self.menubar.Append(menuquehacemos,"&Que hacemos?")
        #self.menubar.Append(menuacerca,"&Acerca de..." )
        # Ahora vienen los bind de las acciones
        #self.Bind(wx.EVT_TOOL, self.OnSalir, busqueda_bmp)
        #self.Bind(wx.EVT_MENU, self.OnEditar, self.editar)
        #self.Bind(wx.EVT_MENU, self.OnIngreso, self.ingreso)
        #self.Bind(wx.EVT_MENU, self.OnBuscar, self.busqueda)
        #self.Bind(wx.EVT_MENU, self.OnLicencia, self.licencia)
        #self.Bind(wx.EVT_MENU, self.OnAutores, self.autores)
        #self.Bind(wx.EVT_MENU, self.OnListar, self.listar)          
        # agregamos la barra principal a la aplicacion
        #self.SetMenuBar(self.menubar)
        # agregamos una barra de estado que nos brinda ayuda sobre el menu
		#############################################
		
        self.statusbar = self.CreateStatusBar()

        self.__set_properties()

    def __set_properties(self):
    	# Aca tenemos las propiedades del titulo y el tamaño del menu

        self.SetTitle("La Agenda de Amalia")
        self.SetSize((350, 150))
        # Ademas de la alineacion
        self.CenterOnScreen()


    def OnEliminar(self,event):
    	# Funcion que llama a otro .py
		# Basicamente lo que se hace es cerrar la ventana activa
        try:
            self.Destroy()# que es lo que ocurre aca            
        finally:
        	# y luego llamar al .py necesario
            import eliminar
            ventana = eliminar.Eliminar(None, -1,"")
            ventana.Show()       


    def OnSalir(self, event):
        # Funcion para finalizar la aplicacion
            
        self.Close()

    def OnIngreso(self, event):
    	
    	
        try:
            self.Destroy()            
        finally:
            import ingreso
            ventana = ingreso.Ingreso(None, -1,"")
            ventana.Show()
        
    def OnBuscar(self, event):
    	
    	
        try:
            self.Destroy()            
        finally:
            import busqueda
            ventana = busqueda.Busqueda(None, -1,"")
            ventana.Show()

    def OnEditar(self,event):
        
        
        try:
            self.Destroy()
        finally:
            import busquedapamodificar
            ventana = busquedapamodificar.BusquedaModificar(None, -1,"")
            ventana.Show()

    def OnLicencia(self, event):
        # Aca mostramos una licencia guardada en un txt
        
        licencia = open("licencia.txt", "r")
        mensaje = licencia.read()
        licencia.close()
        dialogo = wx.lib.dialogs.ScrolledMessageDialog(self, mensaje, "Licencia")
        dialogo.ShowModal()
        
        
    def OnAutores(self, event):
    	
    	
        ladri = open("ladri.txt","r")
        mensaje = ladri.read()
        ladri.close()
        dialogo = wx.lib.dialogs.ScrolledMessageDialog(self, mensaje, "Autor")
        dialogo.ShowModal()
        
    def OnListar(self, event):
    	
        # Arrancamos la conexion a la base de datos
        self.db=MySQLdb.connect(host='localhost',user='amalia',passwd='amalia',db='agenda')
        
        # Creamos un cursor de la misma
        cursor=self.db.cursor()
 
        # Y ejecutamos una orden SQL que inserta los datos capturados desde los textctrl
        cursor.execute('''SELECT * FROM contactos''') 
 
        cursors = cursor.fetchall()
 
        # No nos olvidamos de cerrar el cursor
        cursor.close()
      
        self.resultados = [("%d, %s, %s,%s, %s, %s" % tuple(a)) for a in cursors]

        # creamos un SingleChoiceDialog para traer el resultado de la busqueda
        dlg = wx.SingleChoiceDialog(None,u"Contactos",u"Listado completo", self.resultados)
        dlg.ShowModal()
        dlg.Destroy()
           
    

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    ventana = Principal(None, -1, "")
    app.SetTopWindow(ventana)
    splash = Splash()
    ventana.Show()
    app.MainLoop()
